package com.jl15988.mybatispluskit.join.utils;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;

/**
 * 表信息工具类
 * 用于获取实体类对应的表名等信息
 * 
 * @author Jalon
 * @since 2025/1/1
 */
public class TableInfoUtils {
    
    /**
     * 获取实体类对应的表名
     * 
     * @param entityClass 实体类
     * @return 表名
     */
    public static String getTableName(Class<?> entityClass) {
        // 首先尝试从 @TableName 注解获取表名
        TableName tableNameAnnotation = entityClass.getAnnotation(TableName.class);
        if (tableNameAnnotation != null && StringUtils.isNotBlank(tableNameAnnotation.value())) {
            return tableNameAnnotation.value();
        }
        
        // 如果没有注解，则使用类名转换为下划线命名
        return camelToUnderline(entityClass.getSimpleName());
    }
    
    /**
     * 驼峰命名转下划线命名
     * 
     * @param camelCase 驼峰命名字符串
     * @return 下划线命名字符串
     */
    public static String camelToUnderline(String camelCase) {
        if (StringUtils.isBlank(camelCase)) {
            return camelCase;
        }
        
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < camelCase.length(); i++) {
            char c = camelCase.charAt(i);
            if (Character.isUpperCase(c)) {
                if (i > 0) {
                    result.append("_");
                }
                result.append(Character.toLowerCase(c));
            } else {
                result.append(c);
            }
        }
        return result.toString();
    }
    
    /**
     * 下划线命名转驼峰命名
     * 
     * @param underline 下划线命名字符串
     * @return 驼峰命名字符串
     */
    public static String underlineToCamel(String underline) {
        if (StringUtils.isBlank(underline)) {
            return underline;
        }
        
        StringBuilder result = new StringBuilder();
        boolean toUpperCase = false;
        
        for (int i = 0; i < underline.length(); i++) {
            char c = underline.charAt(i);
            if (c == '_') {
                toUpperCase = true;
            } else {
                if (toUpperCase) {
                    result.append(Character.toUpperCase(c));
                    toUpperCase = false;
                } else {
                    result.append(c);
                }
            }
        }
        return result.toString();
    }
    
    /**
     * 获取实体类的主键字段名
     * 
     * @param entityClass 实体类
     * @return 主键字段名
     */
    public static String getPrimaryKeyColumn(Class<?> entityClass) {
        // 默认返回 "id"，后续可以扩展支持从注解中获取
        return "id";
    }
} 